package Estetica;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.logging.*;


/**
 *
 * @author grodriguezpeinado
 */
public class Cliente {
    
    String nombre;
    String apellido;
    String nick;
    String password;
    String fechaDeAlta;
    String genero;
    String email;

    public Cliente(String nombre, String apellidos, String nick, String password, String fechaDeAlta, String genero, String email) {
        this.nombre = nombre;
        this.apellido = apellidos;
        this.nick = nick;
        this.password = password;
        this.fechaDeAlta = fechaDeAlta;
        this.genero = genero;
        this.email = email;
    }

    public Cliente() {
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellidos) {
        this.apellido = apellidos;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFechaDeAlta() {
        return fechaDeAlta;
    }

    public void setFechaDeAlta(String fechaDeAlta) {
        this.fechaDeAlta = fechaDeAlta;
    }

    public String getGenero() {
        return genero;
    }

    public void setGenero(String genero) {
        this.genero = genero;
    }

    public String getNick() {
        return nick;
    }

    public void setNick(String nick) {
        this.nick = nick;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    /**
     * Devuelve la cita solicitada por el cliente
     * @return La Cita del Cliente
     */
    public Cita pedirCita(){
        Cliente cl = new Cliente(this.nombre, this.apellido, this.nick, this.password, this.fechaDeAlta, this.genero, this.email);
        GregorianCalendar g = new GregorianCalendar();
        //getInstance() devuelve la fecha y hora actual
        Cita ci = new Cita(cl, "pendiente", g.getInstance(), "Cita pendiente de confirmacion");

        return ci;
    }
    
/**************    DB     **************************/
    public boolean registrar(Connection conn, String nombre,String apellidos, String nick, String password, String fecha, String genero, String email) throws SQLException{
        
       try
       {
           Statement stmt = conn.createStatement();

           stmt.executeUpdate("INSERT INTO `bysDB`.`Cliente` (`nombre`,`apellido`,`nick`,`password`,`fecha_alta`,`genero`,`email`) VALUES ('"+nombre+"','"+apellidos+"','"+nick+"','"+password+"','"+fecha+"','"+genero+"','"+email+"');");

           if (stmt != null) stmt.close();
           if (conn != null)conn.close();

           return true;

        } catch (Exception e) {
            Logger.getLogger("RegistrarCliente").log(Level.SEVERE, "ERROR: " + e.getLocalizedMessage());
            return false;
        }
    }
    
    public boolean guardar(){  
        
        ObjetoDB o = new ObjetoDB();
        
        o.setTabla("Cliente");
        o.addCampo("nombre", nombre);
        o.addCampo("apellido", apellido);
        o.addCampo("nick", nick);
        o.addCampo("password", password);
        o.addCampo("fecha_alta", o.getFechaCreacion());
        this.fechaDeAlta = o.getFechaCreacion();
        o.addCampo("genero", genero);
        o.addCampo("email", email);       
        
        AdminDB adb = new AdminDB();
        return adb.guardar(o);
    }
    
    public void getByEmail(Connection conn, String email) throws SQLException{
       try
       {
           Statement stmt = conn.createStatement();
           ResultSet rset = stmt.executeQuery("SELECT * FROM `bysDB`.`Cliente` WHERE email='"+email+"';");

           if (rset.next()){
               int id = rset.getInt("ID");
               
               this.nombre = rset.getString("nombre");
               this.apellido = rset.getString("apellido");
               this.nick = rset.getString("nick");
               this.password = rset.getString("password");
               //this.fechaDeAlta = rset.getString("fecha_alta").replace(".0", "");
               this.genero = rset.getString("genero");
               this.email  = rset.getString("email");
           }
           if (rset!=null) rset.close();
           if (stmt != null) stmt.close();
           if (conn != null)conn.close();

        } catch (Exception e) {
            Logger.getLogger("RegistrarCliente").log(Level.SEVERE, "ERROR: " + e.getLocalizedMessage());
        }
    }
    

    public boolean borrar(){
        AdminDB adb = new AdminDB();
        
        int cpID = adb.getID("CitaPendiente", "emailCliente='"+email+"'");
        
        if(cpID == 0){
            ObjetoDB o = new ObjetoDB();
            o.setTabla("Cliente");
            o.addCampo("email", email); 
            return adb.borrar(o);
        }
        else return false;
    }
  
    public List<Cliente> getAllClientes(Connection conn){
       try
       {
           Statement stmt = conn.createStatement();
           ResultSet rset = stmt.executeQuery("SELECT * FROM `bysDB`.`Cliente`");
           
           List<Cliente> clientes = new ArrayList<Cliente>();
                      
           while(rset.next()){
               Cliente c = new Cliente();
               int id = rset.getInt("ID");
               c.setApellido(rset.getString("apellido"));
               c.setEmail(rset.getString("email"));
              // c.setFechaDeAlta(rset.getString("fechadealta"));
               c.setGenero(rset.getString("genero"));
               c.setNick(rset.getString("nick"));
               c.setNombre(rset.getString("nombre"));
               c.setPassword(rset.getString("password"));
               clientes.add(c);
           }
           
           if (stmt != null) stmt.close();
           if (conn != null)conn.close();

           return clientes;

        } catch (Exception e) {
            Logger.getLogger("Cliente").log(Level.SEVERE, "ERROR: " + e.getLocalizedMessage());
            return null;
        }
    }
/**************    DB     **************************/
    
    public boolean equals(Cliente c){
        
        if(this.email.equals(c.getEmail())) return true;
        else return false;
        
    }
}
